/* 
 * Util
 *
 * Creado el 25-abr-2012, 12:46:32
 */
package com.unicon.autoservicio.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;

/**
 *
 * @author rjrodriguez
 */
public abstract class Util {

    /**
     *
     * @param date fecha a cambiar.
     * @return la fecha date como {@link String} en el formato dd/MM/yyyy.
     */
    public static String dateToString(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        StringBuilder fecha = new StringBuilder(sdf.format(date));
        return fecha.toString();
    }
    
    public static String dateToString(XMLGregorianCalendar date) {
//        Date dt = new Date(date.getTimezone());
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        StringBuilder fecha = new StringBuilder(sdf.format(date.toGregorianCalendar().getTime()));
        return fecha.toString();
    }  
  
    
    public static XMLGregorianCalendar dateToXMLGregorian(Date date) throws DatatypeConfigurationException {
        GregorianCalendar c = new GregorianCalendar();
        c.setTimeInMillis(date.getTime());
        return DatatypeFactory.newInstance().newXMLGregorianCalendar(c);
    }     

    /**
     *
     * @param date fecha a cambiar.
     * @return la fecha date como {@link Date}. El parámetro date debe estar en
     * el formato dd/MM/yyyy.
     * @throws ParseException si el String no puede ser transformado.
     */
    public static Date stringToDate(String date) throws ParseException {
        DateFormat formatter;
        formatter = new SimpleDateFormat("dd/MM/yyyy");
        Date fecha = formatter.parse(date);
        return fecha;
    }
    
    public static XMLGregorianCalendar stringToDateXMLGregorian(String date) 
            throws ParseException,DatatypeConfigurationException {
        DateFormat formatter;
        formatter = new SimpleDateFormat("dd/MM/yyyy");
        Date fecha = formatter.parse(date);
        return dateToXMLGregorian(fecha);
    }    

    /**
     *
     * @param date fecha a cambiar.
     * @param dias cantidad de dias a incrementar a la fecha pasada como
     * parámetro.
     * @return fecha incrementada en una cantidad igual a dias, si dias es
     * negativo se resta a la fecha original.
     */
    public static Date addDays(Date date, short dias) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.DATE, dias);
        return cal.getTime();
    }

    /**
     *
     * @param date fecha a cambiar.
     * @param meses cantidad de meses a incrementar a la fecha pasada como
     * parámetro.
     * @return fecha incrementada en una cantidad igual a meses, si meses es
     * negativo se resta a la fecha original.
     */
    public static Date addMonths(Date date, short meses) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.MONTH, meses);
        return cal.getTime();
    }

    public static XMLGregorianCalendar addMonths(Date date, int meses) throws DatatypeConfigurationException {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(Calendar.MONTH, meses);
        GregorianCalendar c = new GregorianCalendar();
        return DatatypeFactory.newInstance().newXMLGregorianCalendar(c);
    }    
    
    public static double redondear(double nD, int nDec) {
        return Math.round(nD * Math.pow(10, nDec)) / Math.pow(10, nDec);
    }
}
